#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

int const maxn = 1200;
int a[maxn][maxn];
int n;

std::vector<std::string> v(maxn);

void draw(int len)
{
	if (len == 1) { a[0][0] = 1; return; }
	int l = len / 2;
	draw(l);
	for (int i = 0; i < l; i++)
		for (int j = 0; j < l; j++) {
			a[i][j + l] = a[l + i][j] = a[i][j];
			a[i + l][j + l] = -a[i][j];
		}

	for (int i = 0; i < len; i++) {
		v[i] = "";
		for (int j = 0; j < len; j++) v[i] += (a[j][i] == 1) ? '0' : '1';
	}

	std::sort(v.begin(), v.begin() + len);
	for (int i = 0; i < len; i++)
		for (int j = 0; j < len; j++) a[i][j] = (v[j][i] == '0') ? 1 : -1;
}

int main()
{
	std::cin >> n;
	int l = 1 << n;
	draw(l);
	for (int i = 0; i < l; i++) {
		for (int j = 0; j < l; j++) std::cout << ((a[i][j] == 1) ? '+' : '*');
		std::cout << '\n';
	}
}

